// 导入数据库操作模块
const db = require('../config/database')
// 导入 SQL 查询语句
const userQueries = require('../config/userQueries')
// 导入 bcryptjs 加密模块
const bcrypt = require('bcryptjs')

// 获取用户基本信息的处理函数
exports.getUserInfo = (req, res) => {
  db.query(userQueries.SELECT_USER_INFO, req.user.id, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但查询结果可能为空
    if (result.length !== 1) return res.cc('获取用户信息失败！')
    // 用户信息获取成功
    return res.send({
      code: 200,
      msg: '获取用户基本信息成功！',
      data: result[0]
    })
  })
}

// 更新用户基本信息的处理函数
exports.updateUserInfo = (req, res) => {
  db.query(userQueries.UPDATE_USER_INFO, [req.body, req.body.id], (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但影响行为不为 1
    if (result.affectedRows !== 1) return res.cc('修改用户基本信息失败', 501)
    // 修改用户信息成功
    return res.cc('操作成功', 200)
  })
}

// 更新用户密码处理函数
exports.updatePassword = (req, res) => {
  db.query(userQueries.SELECT_USER_BY_ID, req.user.id, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但影响行为不为 1
    if (result.length !== 1) return res.cc('用户不存在')
    // 判断密码是否正确
    const compareResult = bcrypt.compareSync(req.body.oldPwd, result[0].password)
    // 密码错误
    if (!compareResult) return res.cc('原密码错误！')
    // 加密新密码
    const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
    // 执行 SQL 语句，根据id更新用户密码
    db.query(userQueries.UPDATE_USER_PASSWORD, [newPwd, req.user.id], (err, result) => {
      // SQL 语句执行失败
      if (err) return res.cc(err, 500)
      // SQL 语句执行成功，但影响行为不为 1
      if (result.affectedRows !== 1) return res.cc('更新密码失败！', 501)
      // 更新成功
      return res.cc('更新密码成功', 200)
    })
  })
}

// 更新用户头像处理函数
exports.updateAvatar = (req, res) => {
  db.query(userQueries.UPDATE_USER_AVATAR, [req.body.avatar, req.user.id], (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但影响行为不为 1
    if (result.affectedRows !== 1) return res.cc('更新头像失败！', 501)
    // 更新成功
    return res.cc('更新头像成功！', 200)
  })
}

// 删除用户的处理函数
exports.deleteUser = (req, res) => {
  db.query(userQueries.DELETE_USER_BY_ID, req.body.id, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // 未找到任何用户
    if (result.affectedRows !== 1) return res.cc('删除用户失败！', 501)
    // 删除成功
    res.cc('操作成功', 200)
  })
}